<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-type" content="text/html; charset=iso-8859-1">
<title>Streaming API for XML - The Java EE 5 Tutorial</title>
<meta name="robots" content="index,follow">
<meta name="robots" content="index,follow">
<meta name="date" content="2008-10-01">
<link rel="stylesheet" type="text/css" href="css/default.css">
<link rel="stylesheet" type="text/css" href="css/ipg.css">
<link rel="stylesheet" type="text/css" href="css/j5eetutorial.css">
</head>

<body>

<table border="0" cellpadding="5" cellspacing="0" width="100%">
<tbody>
   <tr valign="top">
      <td><p class="toc level1"><a href="docinfo.html">Document Information</a></p>
<p class="toc level1 tocsp"><a href="gexaf.html">Preface</a></p>
<p class="toc level1 tocsp"><a href="gfirp.html">Part&nbsp;I&nbsp;Introduction</a></p>
<p class="toc level2"><a href="bnaaw.html">1.&nbsp;&nbsp;Overview</a></p>
<p class="toc level2"><a href="gfiud.html">2.&nbsp;&nbsp;Using the Tutorial Examples</a></p>
<p class="toc level1 tocsp"><a href="bnadp.html">Part&nbsp;II&nbsp;The Web Tier</a></p>
<p class="toc level2"><a href="bnadr.html">3.&nbsp;&nbsp;Getting Started with Web Applications</a></p>
<p class="toc level2"><a href="bnafd.html">4.&nbsp;&nbsp;Java Servlet Technology</a></p>
<p class="toc level2"><a href="bnagx.html">5.&nbsp;&nbsp;JavaServer Pages Technology</a></p>
<p class="toc level2"><a href="bnajo.html">6.&nbsp;&nbsp;JavaServer Pages Documents</a></p>
<p class="toc level2"><a href="bnakc.html">7.&nbsp;&nbsp;JavaServer Pages Standard Tag Library</a></p>
<p class="toc level2"><a href="bnalj.html">8.&nbsp;&nbsp;Custom Tags in JSP Pages</a></p>
<p class="toc level2"><a href="bnaon.html">9.&nbsp;&nbsp;Scripting in JSP Pages</a></p>
<p class="toc level2"><a href="bnaph.html">10.&nbsp;&nbsp;JavaServer Faces Technology</a></p>
<p class="toc level2"><a href="bnaqz.html">11.&nbsp;&nbsp;Using JavaServer Faces Technology in JSP Pages</a></p>
<p class="toc level2"><a href="bnatx.html">12.&nbsp;&nbsp;Developing with JavaServer Faces Technology</a></p>
<p class="toc level2"><a href="bnavg.html">13.&nbsp;&nbsp;Creating Custom UI Components</a></p>
<p class="toc level2"><a href="bnawo.html">14.&nbsp;&nbsp;Configuring JavaServer Faces Applications</a></p>
<p class="toc level2"><a href="bnaxu.html">15.&nbsp;&nbsp;Internationalizing and Localizing Web Applications</a></p>
<p class="toc level1 tocsp"><a href="bnayk.html">Part&nbsp;III&nbsp;Web Services</a></p>
<p class="toc level2"><a href="bnayl.html">16.&nbsp;&nbsp;Building Web Services with JAX-WS</a></p>
<p class="toc level2"><a href="bnazf.html">17.&nbsp;&nbsp;Binding between XML Schema and Java Classes</a></p>
<div class="onpage">
<p class="toc level2"><a href="">18.&nbsp;&nbsp;Streaming API for XML</a></p>
</div>
<p class="toc level3"><a href="bnbdw.html">Why StAX?</a></p>
<p class="toc level4"><a href="bnbdw.html#bnbdx">Streaming versus DOM</a></p>
<p class="toc level4"><a href="bnbdw.html#bnbdy">Pull Parsing versus Push Parsing</a></p>
<p class="toc level4"><a href="bnbdw.html#bnbdz">StAX Use Cases</a></p>
<p class="toc level4"><a href="bnbdw.html#bnbea">Comparing StAX to Other JAXP APIs</a></p>
<p class="toc level3 tocsp"><a href="bnbec.html">StAX API</a></p>
<p class="toc level4"><a href="bnbec.html#bnbed">Cursor API</a></p>
<p class="toc level4"><a href="bnbec.html#bnbee">Iterator API</a></p>
<p class="toc level5"><a href="bnbec.html#bnbef">Iterator Event Types</a></p>
<p class="toc level5"><a href="bnbec.html#bnbeh">Example of Event Mapping</a></p>
<p class="toc level4 tocsp"><a href="bnbec.html#bnbej">Choosing between Cursor and Iterator APIs</a></p>
<p class="toc level5"><a href="bnbec.html#bnbek">Development Goals</a></p>
<p class="toc level5"><a href="bnbec.html#bnbel">Comparing Cursor and Iterator APIs</a></p>
<p class="toc level3 tocsp"><a href="bnbem.html">Using StAX</a></p>
<p class="toc level4"><a href="bnbem.html#bnben">StAX Factory Classes</a></p>
<p class="toc level5"><a href="bnbem.html#bnbeo"><tt>XMLInputFactory</tt> Class</a></p>
<p class="toc level5"><a href="bnbem.html#bnbeq"><tt>XMLOutputFactory</tt> Class</a></p>
<p class="toc level5"><a href="bnbem.html#bnber"><tt>XMLEventFactory</tt> Class</a></p>
<p class="toc level4 tocsp"><a href="bnbem.html#bnbes">Resources, Namespaces, and Errors</a></p>
<p class="toc level5"><a href="bnbem.html#bnbet">Resource Resolution</a></p>
<p class="toc level5"><a href="bnbem.html#bnbeu">Attributes and Namespaces</a></p>
<p class="toc level5"><a href="bnbem.html#bnbev">Error Reporting and Exception Handling</a></p>
<p class="toc level4 tocsp"><a href="bnbem.html#bnbew">Reading XML Streams</a></p>
<p class="toc level5"><a href="bnbem.html#bnbex">Using <tt>XMLStreamReader</tt></a></p>
<p class="toc level5"><a href="bnbem.html#bnbfb">Using <tt>XMLEventReader</tt></a></p>
<p class="toc level4 tocsp"><a href="bnbem.html#bnbfe">Writing XML Streams</a></p>
<p class="toc level5"><a href="bnbem.html#bnbff">Using <tt>XMLStreamWriter</tt></a></p>
<p class="toc level5"><a href="bnbem.html#bnbfg">Using <tt>XMLEventWriter</tt></a></p>
<p class="toc level3 tocsp"><a href="bnbfi.html">Sun's Streaming XML Parser Implementation</a></p>
<p class="toc level4"><a href="bnbfi.html#bnbfj">Reporting CDATA Events</a></p>
<p class="toc level4"><a href="bnbfi.html#bnbfk">Streaming XML Parser Factories Implementation</a></p>
<p class="toc level3 tocsp"><a href="bnbfl.html">Example Code</a></p>
<p class="toc level4"><a href="bnbfl.html#bnbfm">Example Code Organization</a></p>
<p class="toc level4"><a href="bnbfl.html#bnbfn">Example XML Document</a></p>
<p class="toc level4"><a href="bnbfl.html#bnbfo">Cursor Example</a></p>
<p class="toc level5"><a href="bnbfl.html#bnbfp">Stepping through Events</a></p>
<p class="toc level5"><a href="bnbfl.html#bnbfq">Returning String Representations</a></p>
<p class="toc level5"><a href="bnbfl.html#bnbfr">Building and Running the Cursor Example Using NetBeans IDE</a></p>
<p class="toc level5"><a href="bnbfl.html#bnbfs">Building and Running the Cursor Example Using Ant</a></p>
<p class="toc level4 tocsp"><a href="bnbfl.html#bnbft">Cursor-to-Event Example</a></p>
<p class="toc level5"><a href="bnbfl.html#bnbfu">Instantiating an <tt>XMLEventAllocator</tt></a></p>
<p class="toc level5"><a href="bnbfl.html#bnbfv">Creating an Event Iterator</a></p>
<p class="toc level5"><a href="bnbfl.html#bnbfw">Creating the Allocator Method</a></p>
<p class="toc level5"><a href="bnbfl.html#bnbfx">Building and Running the Cursor-to-Event Example Using NetBeans IDE</a></p>
<p class="toc level5"><a href="bnbfl.html#bnbfy">Building and Running the Cursor-to-Event Example Using Ant</a></p>
<p class="toc level4 tocsp"><a href="bnbfl.html#bnbfz">Event Example</a></p>
<p class="toc level5"><a href="bnbfl.html#bnbga">Creating an Input Factory</a></p>
<p class="toc level5"><a href="bnbfl.html#bnbgb">Creating an Event Reader</a></p>
<p class="toc level5"><a href="bnbfl.html#bnbgc">Creating an Event Iterator</a></p>
<p class="toc level5"><a href="bnbfl.html#bnbgd">Getting the Event Stream</a></p>
<p class="toc level5"><a href="bnbfl.html#bnbge">Returning the Output</a></p>
<p class="toc level5"><a href="bnbfl.html#bnbgf">Building and Running the Event Example Using NetBeans IDE</a></p>
<p class="toc level5"><a href="bnbfl.html#bnbgg">Building and Running the Event Example Using Ant</a></p>
<p class="toc level4 tocsp"><a href="bnbfl.html#bnbgh">Filter Example</a></p>
<p class="toc level5"><a href="bnbfl.html#bnbgi">Implementing the <tt>StreamFilter</tt> Class</a></p>
<p class="toc level5"><a href="bnbfl.html#bnbgj">Creating an Input Factory</a></p>
<p class="toc level5"><a href="bnbfl.html#bnbgk">Creating the Filter</a></p>
<p class="toc level5"><a href="bnbfl.html#bnbgl">Capturing the Event Stream</a></p>
<p class="toc level5"><a href="bnbfl.html#bnbgm">Filtering the Stream</a></p>
<p class="toc level5"><a href="bnbfl.html#bnbgn">Returning the Output</a></p>
<p class="toc level5"><a href="bnbfl.html#bnbgo">Building and Running the Filter Example Using NetBeans IDE</a></p>
<p class="toc level5"><a href="bnbfl.html#bnbgp">Building and Running the Filter Example Using Ant</a></p>
<p class="toc level4 tocsp"><a href="bnbfl.html#bnbgq">Read-and-Write Example</a></p>
<p class="toc level5"><a href="bnbfl.html#bnbgr">Creating an Event Producer/Consumer</a></p>
<p class="toc level5"><a href="bnbfl.html#bnbgs">Creating an Iterator</a></p>
<p class="toc level5"><a href="bnbfl.html#bnbgt">Creating a Writer</a></p>
<p class="toc level5"><a href="bnbfl.html#bnbgu">Returning the Output</a></p>
<p class="toc level5"><a href="bnbfl.html#bnbgv">Building and Running the Read-and-Write Example Using NetBeans IDE</a></p>
<p class="toc level5"><a href="bnbfl.html#bnbgw">Building and Running the Read-and-Write Example Using Ant</a></p>
<p class="toc level4 tocsp"><a href="bnbfl.html#bnbgx">Writer Example</a></p>
<p class="toc level5"><a href="bnbfl.html#bnbgy">Creating the Output Factory</a></p>
<p class="toc level5"><a href="bnbfl.html#bnbgz">Creating a Stream Writer</a></p>
<p class="toc level5"><a href="bnbfl.html#bnbha">Writing the Stream</a></p>
<p class="toc level5"><a href="bnbfl.html#bnbhb">Returning the Output</a></p>
<p class="toc level5"><a href="bnbfl.html#bnbhc">Building and Running the Writer Example Using NetBeans IDE</a></p>
<p class="toc level5"><a href="bnbfl.html#bnbhd">Building and Running the Writer Example Using Ant</a></p>
<p class="toc level3 tocsp"><a href="bnbhe.html">Further Information about StAX</a></p>
<p class="toc level2 tocsp"><a href="bnbhf.html">19.&nbsp;&nbsp;SOAP with Attachments API for Java</a></p>
<p class="toc level1 tocsp"><a href="bnblr.html">Part&nbsp;IV&nbsp;Enterprise Beans</a></p>
<p class="toc level2"><a href="bnbls.html">20.&nbsp;&nbsp;Enterprise Beans</a></p>
<p class="toc level2"><a href="bnbnb.html">21.&nbsp;&nbsp;Getting Started with Enterprise Beans</a></p>
<p class="toc level2"><a href="bnboc.html">22.&nbsp;&nbsp;Session Bean Examples</a></p>
<p class="toc level2"><a href="bnbpk.html">23.&nbsp;&nbsp;A Message-Driven Bean Example</a></p>
<p class="toc level1 tocsp"><a href="bnbpy.html">Part&nbsp;V&nbsp;Persistence</a></p>
<p class="toc level2"><a href="bnbpz.html">24.&nbsp;&nbsp;Introduction to the Java Persistence API</a></p>
<p class="toc level2"><a href="bnbrl.html">25.&nbsp;&nbsp;Persistence in the Web Tier</a></p>
<p class="toc level2"><a href="bnbrs.html">26.&nbsp;&nbsp;Persistence in the EJB Tier</a></p>
<p class="toc level2"><a href="bnbtg.html">27.&nbsp;&nbsp;The Java Persistence Query Language</a></p>
<p class="toc level1 tocsp"><a href="bnbwi.html">Part&nbsp;VI&nbsp;Services</a></p>
<p class="toc level2"><a href="bnbwj.html">28.&nbsp;&nbsp;Introduction to Security in the Java EE Platform</a></p>
<p class="toc level2"><a href="bnbyk.html">29.&nbsp;&nbsp;Securing Java EE Applications</a></p>
<p class="toc level2"><a href="bncas.html">30.&nbsp;&nbsp;Securing Web Applications</a></p>
<p class="toc level2"><a href="bncdq.html">31.&nbsp;&nbsp;The Java Message Service API</a></p>
<p class="toc level2"><a href="bncgv.html">32.&nbsp;&nbsp;Java EE Examples Using the JMS API</a></p>
<p class="toc level2"><a href="bncih.html">33.&nbsp;&nbsp;Transactions</a></p>
<p class="toc level2"><a href="bncjh.html">34.&nbsp;&nbsp;Resource Connections</a></p>
<p class="toc level2"><a href="bncjx.html">35.&nbsp;&nbsp;Connector Architecture</a></p>
<p class="toc level1 tocsp"><a href="bnckn.html">Part&nbsp;VII&nbsp;Case Studies</a></p>
<p class="toc level2"><a href="bncko.html">36.&nbsp;&nbsp;The Coffee Break Application</a></p>
<p class="toc level2"><a href="bnclz.html">37.&nbsp;&nbsp;The Duke's Bank Application</a></p>
<p class="toc level1 tocsp"><a href="gexbq.html">Part&nbsp;VIII&nbsp;Appendixes</a></p>
<p class="toc level2"><a href="bncno.html">A.&nbsp;&nbsp;Java Encoding Schemes</a></p>
<p class="toc level2"><a href="bncnq.html">B.&nbsp;&nbsp;Preparation for Java EE Certification Exams</a></p>
<p class="toc level2"><a href="bncnt.html">C.&nbsp;&nbsp;About the Authors</a></p>
<p class="toc level1 tocsp"><a href="idx-1.html">Index</a></p>
</td>
      <td width="10px">&nbsp;</td>
      <td width="705px">
         <div class="header">
             <div class="header-links-top">
                 <a href="http://java.sun.com">java.sun.com</a> |
                 <a href="http://docs.sun.com/">docs.sun.com</a><br>
             </div> 
             <img src="graphics/tutorialBanner.gif" width="704" height="120" alt="The Java&trade; EE 5 Tutorial"/>
             <div class="header-links">
	         <a href="index.html">Home</a> |
                 <a href="http://java.sun.com/javaee/5/docs/tutorial/information/download.html">Download</a> |
                 <a href="http://java.sun.com/javaee/5/docs/tutorial/doc/JavaEETutorial.pdf">PDF</a> |
                 <a href="http://java.sun.com/javaee/5/docs/api/index.html">API</a> |
                 <a href="http://java.sun.com/javaee/5/docs/tutorial/information/faq.html">FAQ</a> |
                 <a href="http://java.sun.com/javaee/5/docs/tutorial/information/search.html">Search</a> |
                 <a href="http://java.sun.com/javaee/5/docs/tutorial/information/sendusmail.html">Feedback</a> |
                 <a href="http://java.sun.com/javaee/5/docs/tutorial/information/history.html">History</a>
             </div>
             <div class="navigation">
                 <a href="bnbdu.html"><img style="padding-right: 3px" src="graphics/leftButton.gif" border="0"></a>
                 <a href="sjsaseej2eet.html"><img style="padding-right: 3px" src="graphics/upButton.gif" border="0"></a>
                 <a href="bnbdw.html"><img style="padding-left: 3px" src="graphics/rightButton.gif" border="0"></a>
             </div>
         </div>

	 <div class="maincontent">      	 
             <a name="bnbdv"></a><h3>Chapter&nbsp;18</h3><h3>Streaming API for XML</h3><a name="indexterm-1825"></a><a name="indexterm-1826"></a><a name="indexterm-1827"></a><p><a name="indexterm-1828"></a>This chapter focuses on the Streaming API for XML (StAX), a streaming Java-based,
event-driven, pull-parsing API for reading and writing XML documents. StAX enables you to
create bidrectional XML parsers that are fast, relatively easy to program, and have
a light memory footprint.</p><p>StAX is the latest API in the JAXP family, and provides an
alternative to SAX, DOM, TrAX, and DOM for developers looking to do high-performance
stream filtering, processing, and modification, particularly with low memory and limited extensibility requirements.</p><p>To summarize, StAX provides a standard, bidirectional <b>pull parser</b> interface for streaming XML
processing, offering a simpler programming model than SAX and more efficient memory management
than DOM. StAX enables developers to parse and modify XML streams as events,
and to extend XML information models to allow application-specific additions. More detailed comparisons of
StAX with several alternative APIs are provided below, in <a href="bnbdw.html#bnbea">Comparing StAX to Other JAXP APIs</a>.</p>
         </div>
         <div class="navigation">
             <a href="bnbdu.html"><img style="padding-right: 3px" src="graphics/leftButton.gif" border="0"></a>
             <a href="sjsaseej2eet.html"><img style="padding-right: 3px" src="graphics/upButton.gif" border="0"></a>
             <a href="bnbdw.html"><img style="padding-left: 3px" src="graphics/rightButton.gif" border="0"></a>
         </div>

         <div class="copyright">
      	    <p>The material in The Java&trade; EE 5 Tutorial is <a href='docinfo.html'>copyright</a>-protected and may not be published in other works without express written permission from Sun Microsystems.</p>
      	 </div>

      </td>
   </tr>
</tbody>
</table>
</body>
</html>

